# -*- coding: utf-8 -*-
__author__ = 'lztkdr'
__date__ = '2020/12/3 11:47'

"""
    枯燥的regex正则表达式，使用的是re模块
    1- re.match(正则表达式，需要处理的str)来匹配 -->  a Match object, or None if no match was found.
    2- match(r"",str) 在第一个参数的**外面**需要写一个小写的r来表示这是一个regex
"""
"""
    regex中的分组，在正则中对部分规则添加小括号
    1- match结果的group无参数的把匹配的**全部**取出来
    2- match.group(1) 取出匹配正则中第一个小括号的内容
    3- 先是判断是否匹配整个正则，然后取出部分内容符合小括号的内容
    4- 正则中的 | 表示or, 但是表示的是|前的”所有“or上竖线后的**所有**
    5- 三个双引号除了可以保持格式外，主要是可以有效的防止str中存在双引号和单引号
"""
"""
    re模块的其他函数
    1- match()      从开头匹配查找
    2- search()     不必从开头匹配查找，有就行 --> group
    3- findall()    全文查找符合正则的列表     --> list
    4- sub()        将查询到的str进行替换
    5- split()      按照正则，去切割str
"""
import re

result1 = re.match(r"终结者", "终结者1")

# 有返回值group取出来自己期望的值
# 相当于C# Regex.IsMatch("input", "pattern") , JS 的 /pattern/.test("input")
if result1:
	print('group：', result1.group())
else:
	print('不匹配')

if result1 is None:
	print('不匹配')

print('-------------------------------------------')

result1 = re.match(r"(\d{3,4})-?(\d{7,8})", "0531-12345678").group(1)
result2 = re.match(r"(\d{3,4})-?(\d{7,8})", "0531-12345678").group(2)
print(result1)  # 0531
print(result2)  # 12345678

print('-------------------------------------------------------------------------------------------')

p = re.compile(r'(\d+)-(\d+)-(\d+)')
print(p.match('2018-05-10').groups())  # ('2018', '05', '10')

print('-------------------------------------------')

pattern = re.compile(r'[a-z]+(\d+)[a-z]+')
mat = pattern.match('one12twothree34four')
print(mat.group(1))  # 12

print('-------------------------------------------')

pattern = re.compile(r'(\d+)')
strs = pattern.findall('one12twothree34four')  # ['12,'34']
print(strs)

print('-------------------------------------------------------------------------------------------')

string = "我喜欢身高170的女孩"
pattern = re.compile(r"\d+")


def fn(t):
	ret = int(t.group())
	return str(ret - 10)


ret = pattern.sub(fn, string)
print(ret)  # 我喜欢身高160的女孩

print('-------------------------------------------')

s1 = '<p><div><span>猪八戒</span></div></p>'

mat = re.match(r".+>(\w+)<.+", s1)
print(mat.group(1))  # 猪八戒

s2 = re.sub(r"(.+>)(\w+)(<.+)", r"\1孙悟空\3", s1)
print(s2)  # <p><div><span>孙悟空</span></div></p>

print('-------------------------------------------------------------------------------------------')

s = 'abc,  abc,  defg,  dds'
# \W 匹配任何非单词字符
res = re.split('\W+', s)
print(res)
print('-------------------------------------------')
# 如果加上括号，结果会同时返回去掉的值
res = re.split('(\W+)', s)
print(res)
print('-------------------------------------------')
# 当前字符串只切分1次
res = re.split('(\W+)', s, 1)
print(res)
